package com.schoolhelper.task.service;

import com.schoolhelper.task.domain.TaskOrder;
import java.util.List;

/**
 * 任务订单服务层接口
 * 定义任务订单相关的业务逻辑方法
 */
public interface TaskOrderService {
    
    /**
     * 创建新的任务订单
     * @param taskOrder 任务订单对象
     * @return 创建成功的任务订单
     */
    TaskOrder createTaskOrder(TaskOrder taskOrder);
    
    /**
     * 根据ID获取任务订单详情
     * @param id 订单ID
     * @return 任务订单对象
     */
    TaskOrder getTaskOrderById(Long id);
    
    /**
     * 获取所有任务订单列表
     * @return 任务订单列表
     */
    List<TaskOrder> getAllTaskOrders();
    
    /**
     * 根据状态获取任务订单列表
     * @param status 订单状态
     * @return 任务订单列表
     */
    List<TaskOrder> getTaskOrdersByStatus(String status);
    
    /**
     * 获取用户发布的任务订单列表
     * @param publisherId 发布者用户ID
     * @return 任务订单列表
     */
    List<TaskOrder> getMyPublishedOrders(Long publisherId);
    
    /**
     * 获取用户接受的任务订单列表
     * @param accepterId 接单者用户ID
     * @return 任务订单列表
     */
    List<TaskOrder> getMyAcceptedOrders(Long accepterId);
    
    /**
     * 根据分类获取任务订单列表
     * @param category 任务分类
     * @return 任务订单列表
     */
    List<TaskOrder> getTaskOrdersByCategory(String category);
    
    /**
     * 接受任务订单
     * @param orderId 订单ID
     * @param accepterId 接单者用户ID
     * @return 是否接单成功
     */
    boolean acceptTaskOrder(Long orderId, Long accepterId);
    
    /**
     * 完成任务订单
     * @param orderId 订单ID
     * @param userId 操作用户ID（发布者或接单者）
     * @return 是否完成成功
     */
    boolean completeTaskOrder(Long orderId, Long userId);
    
    /**
     * 取消任务订单（发布者取消）
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 是否取消成功
     */
    boolean cancelTaskOrder(Long orderId, Long userId);
    
    /**
     * 取消接单（接单者取消）
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 是否取消成功
     */
    boolean cancelAcceptTaskOrder(Long orderId, Long userId);
    
    /**
     * 更新任务订单信息
     * @param taskOrder 任务订单对象
     * @param userId 操作用户ID（只有发布者可以修改）
     * @return 是否更新成功
     */
    boolean updateTaskOrder(TaskOrder taskOrder, Long userId);
    
    /**
     * 删除任务订单
     * @param orderId 订单ID
     * @param userId 操作用户ID（只有发布者可以删除）
     * @return 是否删除成功
     */
    boolean deleteTaskOrder(Long orderId, Long userId);
    
    /**
     * 搜索任务订单
     * @param keyword 搜索关键词
     * @return 任务订单列表
     */
    List<TaskOrder> searchTaskOrders(String keyword);
    
    /**
     * 分页查询任务订单
     * @param page 页码（从0开始）
     * @param size 每页大小
     * @return 任务订单列表
     */
    List<TaskOrder> getTaskOrdersWithPagination(int page, int size);
    
    /**
     * 统计任务订单总数
     * @return 总数
     */
    int countTaskOrders();
    
    /**
     * 处理过期任务，将过期的待接单任务状态更新为已取消
     * @return 更新的任务数量
     */
    int handleExpiredTasks();
}